package com.um.jdy.rpc.api;

import com.um.jdy.rpc.entity.EVDeviceParams;
import com.um.jdy.rpc.entity.EVUpgradeParams;
import com.um.jdy.rpc.ev.confirmation.*;
import com.um.jdy.rpc.ev.entity.EVStartChargeParams;
import com.um.jdy.rpc.ev.enums.RestartExecuteType;
import com.um.springcloud.dubbo.cluster.DeviceKey;

import java.util.Date;

/**
 * 中央系统通知业务系统的设备相关服务
 * 业务系统实现接口
 *
 * @author 邓南辉
 * 日期 2022/3/30
 * 版权所有 广州优匠科技有限公司
 */
public interface RpcEVDeviceService {


    /**
     * 发起充电
     * @param imei    IMEI码
     * @param port    枪号
     * @param params  额外参数
     */
    void startCharge(DeviceKey imei, Integer port, EVStartChargeParams params);

    /**
     * 停止充电
     *
     * @param imei   IMEI码
     * @param port  枪号
     */
    void stopCharge(DeviceKey imei, Integer port);

    /**
     * 充电过程用户有充值：更新余额到设备
     * @param imei IMEI码
     * @param port 枪号
     * @param cardNo 物理卡号
     * @param balance 账户余额
     */
    UpdateBalanceConfirmation updateBalance(DeviceKey imei, Integer port, String cardNo, Integer balance);

    /**
     * 更新充电桩时间
     * @param imei        IMEI码
     * @param datetime    时间
     */
    UpdateTimeConfirmation updateTime(DeviceKey imei, Date datetime);


    /**
     * 设备远程重启
     * @param imei IMEI码
     * @param restartExecuteType 0x01：立即执行 0x02：空闲执行
     */
    RemoteRestartConfirmation restart(DeviceKey imei, RestartExecuteType restartExecuteType);

    /**
     * 远程设置设置参数
     * @param imei IMEI码
     * @param params 参数
     */
    SetParametersConfirmation setParameters(DeviceKey imei, EVDeviceParams params);

    /**
     *
     * 设备远程升级更新
     * @param imei IMEI码
     * @param params 升级参数
     */
    void upgrade(DeviceKey imei,EVUpgradeParams params);

    /**
     * 设置计费模型
     * @param imei IMEI码
     */
    SetPriceModelConfirmation setPriceModel(DeviceKey imei);
}
